﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Business_Objects;
using NetOffice.ExcelApi;
using ServicesComponent.Repositories;
using DataTable = System.Data.DataTable;

public partial class Import_ImportStudent : System.Web.UI.Page
{
   static  IStudentRepository stu;
    private ControlBase ctbase = new ControlBase();
    protected void Page_Load(object sender, EventArgs e)
    {
       
    }
    private void ImportPupilFile()
    {
        //DataTable dtImport = new DataTable();
        //try
        //{
        var strFile = FileUpload1.PostedFile .InputStream ;// fuFile.PostedFile.InputStream;
            DataTable dt0 = ctbase.ReadFileFromExcel(strFile);
            if (dt0 == null)
            {
                return;
            }
        //    DataRow row2 = dt0.Rows[2];
        //    if (!ValidateColumn(row2))
        //    {
        //        return;
        //    }
        //    dt0.Rows[0].Delete();
        //    dt0.Rows[0].Delete();
        //    dt0.Rows[0].Delete();
          
        //    dtImport = MapColumn(dt0);
        //    dtImport.Columns.Add("ErrorName");
        //    dtImport.Columns.Add("ErrorMsg");
        //    ReSetSexName(dtImport);
        //    int maxRow = GridRow.CheckMaxRowImport(dt0.Rows.Count);
        //    if (maxRow > 0)
        //    {
        //        AlertMessageInUpdatePanel(upList, "Dữ liệu trong file excel không được lớn " + maxRow.ToString() + " dòng. Bạn hãy xóa các dữ liệu trống không cần thiết trong file excel");
        //        return;
        //    }

        //    if (!CheckDataBeforImport(dtImport))
        //    {
        //        mpePopupWarning.Show();
        //    }
        //    else
        //    {
            int retval = InsertOrUpdatePupilFile(dt0);
        //        if (retval > 0)
        //        {
        //            dtImport = new DataTable();
        //            AlertMessageInUpdatePanel(upList, "Import thông tin học sinh thành công");
        //            WriteLogInfo(1, string.Empty, string.Empty, "Import hồ sơ học sinh");
        //        }
        //    }
        //}
        //catch
        //{
        //    lblImportError.CssClass = GridRow.ERROR_CSS;
        //    lblImportError.Text = "Có lỗi trong quá trình import học sinh. ";

        //}


    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        ImportPupilFile();
    }
    int InsertOrUpdatePupilFile(DataTable dt)
    {//null # ""
         Student  obj = new Student();
            String subCommitee = String.Empty;
        //Xóa các dòng tiêu đề.
            dt.Rows[0].Delete();
            dt.Rows[0].Delete();
            dt.Rows[0].Delete();
        if (dt.Rows.Count >50)
        {
            Alert.Show("Dữ liêu trong file excel không được lớn hơn 50 dòng. Bạn hãy xóa các dữ liệu trống không cần thiết trong file excel");
            return -1;
        }
        dt=RemoveRowEmpty(dt);
        if (!CheckDataBeforImport(dt))
        {
             return -1;
        }
        else
        {


            foreach (DataRow row in dt.Rows)
            {
//Byte[] bt = null; bt = imageToByteArray(pictureBox1.Image); 
                obj.Id = Guid.NewGuid();
                System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

                byte[] arraytoinsert = encoding.GetBytes("Chưa có ảnh"); // { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
                obj.Image = arraytoinsert; // (byte[])row["Image"];
                if (row[1].ToString() == "" || row[0].ToString() == "")
                {
                    break;
                }
                obj.StudentNumber = row[0].ToString(); // row["StudentNumber"].ToString();
                obj.Name = row[1].ToString();
                obj.StudentBirthday = DateTime.Now; // DateTime.Parse(row[2].ToString());    Chưa convert đc.
                //True - Nam
                if (row[3].ToString() == "Nam")
                {
                    obj.Sex = true;
                }
                else
                {
                    obj.Sex = false;
                }
                // obj.Sex  = bool.Parse(row[3].ToString());
                obj.Nationalities = ""; // row["Nationalities"].ToString();
                obj.Religion = ""; // row["Religion"].ToString();
                obj.Nationals = ""; //  row["Nationals"].ToString();
                //Thường chú
                obj.HomeAddress = row[4].ToString();
                obj.ProvinceHome = row[5].ToString();
                obj.DistrictHome = row[6].ToString();
                obj.SocialHome = row[7].ToString();

                //tạm thời
                obj.TemporaryAddress = ""; //row["TemporaryAddress"].ToString();
                obj.ProvinceTemporary = ""; // row["ProvinceTemporary"].ToString();
                obj.DistrictTemporary = ""; //row["DistrictTemporary"].ToString();
                obj.SocialTemporary = ""; // row["SocialTemporary"].ToString();

                obj.FatherName = row[8].ToString();
                obj.FatherJob = row[9].ToString();
                if (row[10].ToString() == "")
                {
                    obj.FatherMobile = 0;
                }
                else
                {
                    obj.FatherMobile = int.Parse(row[10].ToString());
                }
              
                obj.MotherName = row[11].ToString();
                obj.MotherJob = row[12].ToString();
                if (row[13].ToString() == "")
                {
                    obj.MotherMobile = 0;
                }
                else
                {
                    obj.MotherMobile = int.Parse(row[13].ToString());
                }
               

                obj.CommunicantName = row[14].ToString();
                obj.CommunicantAddress = row[15].ToString();
                obj.CommunicantMobile = int.Parse(row[16].ToString());

                obj.Martyrs = false; // bool.Parse(row["Martyrs"].ToString());
                obj.Wounded = false; // bool.Parse(row["Wounded"].ToString());

                obj.Illness = false; // bool.Parse(row["Illness"].ToString());
                obj.Revolution = false; // bool.Parse(row["Revolution"].ToString());
                obj.Poor = false; // bool.Parse(row["Poor"].ToString());
                obj.Orphaned = false; // bool.Parse(row["Orphaned"].ToString());
                obj.Unrefuge = false; //  bool.Parse(row["Unrefuge"].ToString());
                obj.Disabilities = false; // bool.Parse(row["Disabilities"].ToString());
                obj.Minority = false; //  bool.Parse(row["Minority"].ToString());
                obj.Inactive = false; // bool.Parse(row["Inactive"].ToString());
                obj.SchoolID = int.Parse(Session["SchoolID"].ToString());
                obj.SchoolYearId = Guid.Parse(Session["SchoolYearID"].ToString());

                stu = FactoryServices.GetServicesStudent(stu);
                stu.Insert(obj);
            }
            Alert.Show("Cập nhập học sinh thành công !");
            return 1;
        }
    }

    private bool CheckDataBeforImport(DataTable dt)
    {
        foreach (DataRow row in dt.Rows)
        {
            String Code = row[0].ToString();
          if (CheckExistsPupilCode(dt, Code))
          {
              break;
          }
          else
          {
              
          }
        }
        return true;
    }
    /// <summary>
    /// Kiem tra ma hoc sinh co trung nhau trong file excel
    /// return false: Co ma hoc sinh trung nhau
    /// </summary>
    /// <param name="dt"></param>
    /// <param name="pupilCode"></param>
    /// <returns></returns>
    private bool CheckExistsPupilCode(DataTable dt, string pupilCode)
    {
        var lst = from c in dt.Select()
                  where c[0].ToString().Equals(pupilCode.Trim())
                  select c;
        if (lst.ToList().Count > 1)
        {
                Alert .Show("Trong file excel có nhiều hơn 1 học sinh có mã " + pupilCode + ". ");
               return false;
         }
             return true;
        }

    private DataTable RemoveRowEmpty(DataTable dt)
    {
        string studenNumber = String.Empty;
        string name = string.Empty;
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            DataRow row = dt.Rows[i];
            studenNumber = row[0].ToString().Trim();
            name = row[1].ToString().Trim();
            if (String.IsNullOrEmpty(studenNumber) || String.IsNullOrEmpty(name))
            {
                dt.Rows.RemoveAt(i);
                i--;
                dt.AcceptChanges();
            }
        }
        return dt;
    }

    }
